# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.BigQuery.V2.Model.DatasetAccess do
  @moduledoc """
  An object that defines dataset access for an entity.

  ## Attributes

  *   `condition` (*type:* `GoogleApi.BigQuery.V2.Model.Expr.t`, *default:* `nil`) - Optional. condition for the binding. If CEL expression in this field is true, this access binding will be considered
  *   `dataset` (*type:* `GoogleApi.BigQuery.V2.Model.DatasetAccessEntry.t`, *default:* `nil`) - [Pick one] A grant authorizing all resources of a particular type in a particular dataset access to this dataset. Only views are supported for now. The role field is not required when this field is set. If that dataset is deleted and re-created, its access needs to be granted again via an update operation.
  *   `domain` (*type:* `String.t`, *default:* `nil`) - [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: "example.com". Maps to IAM policy member "domain:DOMAIN".
  *   `groupByEmail` (*type:* `String.t`, *default:* `nil`) - [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member "group:GROUP".
  *   `iamMember` (*type:* `String.t`, *default:* `nil`) - [Pick one] Some other type of member that appears in the IAM Policy but isn't a user, group, domain, or special group.
  *   `role` (*type:* `String.t`, *default:* `nil`) - An IAM role ID that should be granted to the user, group, or domain specified in this access entry. The following legacy mappings will be applied: * `OWNER`: `roles/bigquery.dataOwner` * `WRITER`: `roles/bigquery.dataEditor` * `READER`: `roles/bigquery.dataViewer` This field will accept any of the above formats, but will return only the legacy format. For example, if you set this field to "roles/bigquery.dataOwner", it will be returned back as "OWNER".
  *   `routine` (*type:* `GoogleApi.BigQuery.V2.Model.RoutineReference.t`, *default:* `nil`) - [Pick one] A routine from a different dataset to grant access to. Queries executed against that routine will have read access to views/tables/routines in this dataset. Only UDF is supported for now. The role field is not required when this field is set. If that routine is updated by any user, access to the routine needs to be granted again via an update operation.
  *   `specialGroup` (*type:* `String.t`, *default:* `nil`) - [Pick one] A special group to grant access to. Possible values include: * projectOwners: Owners of the enclosing project. * projectReaders: Readers of the enclosing project. * projectWriters: Writers of the enclosing project. * allAuthenticatedUsers: All authenticated BigQuery users. Maps to similarly-named IAM members.
  *   `userByEmail` (*type:* `String.t`, *default:* `nil`) - [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member "user:EMAIL" or "serviceAccount:EMAIL".
  *   `view` (*type:* `GoogleApi.BigQuery.V2.Model.TableReference.t`, *default:* `nil`) - [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to views/tables/routines in this dataset. The role field is not required when this field is set. If that view is updated by any user, access to the view needs to be granted again via an update operation.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :condition => GoogleApi.BigQuery.V2.Model.Expr.t() | nil,
          :dataset => GoogleApi.BigQuery.V2.Model.DatasetAccessEntry.t() | nil,
          :domain => String.t() | nil,
          :groupByEmail => String.t() | nil,
          :iamMember => String.t() | nil,
          :role => String.t() | nil,
          :routine => GoogleApi.BigQuery.V2.Model.RoutineReference.t() | nil,
          :specialGroup => String.t() | nil,
          :userByEmail => String.t() | nil,
          :view => GoogleApi.BigQuery.V2.Model.TableReference.t() | nil
        }

  field(:condition, as: GoogleApi.BigQuery.V2.Model.Expr)
  field(:dataset, as: GoogleApi.BigQuery.V2.Model.DatasetAccessEntry)
  field(:domain)
  field(:groupByEmail)
  field(:iamMember)
  field(:role)
  field(:routine, as: GoogleApi.BigQuery.V2.Model.RoutineReference)
  field(:specialGroup)
  field(:userByEmail)
  field(:view, as: GoogleApi.BigQuery.V2.Model.TableReference)
end

defimpl Poison.Decoder, for: GoogleApi.BigQuery.V2.Model.DatasetAccess do
  def decode(value, options) do
    GoogleApi.BigQuery.V2.Model.DatasetAccess.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.BigQuery.V2.Model.DatasetAccess do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
